﻿Public Class CustomKOSwitchStuffEditor
    Enum Modes
        Terrain_Boost
        Weather_Movement
        Weather_Indirect_Range
        On_Terrain_Boost
        Costs_On_Terrain
        Unit_Costs
        Terrain_Change
        Weather_Ignoring
        Movememt_Change
    End Enum

    Dim Writer As frmScriptWriter

    Public Sub New()

        ' Dieser Aufruf ist fuer den Windows Form-Designer erforderlich.
        InitializeComponent()
        Me.Visible = False
        ' Fuegen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
        cbMode.Items.Clear()
        cbMode.Items.AddRange([Enum].GetNames(Modes.Unit_Costs.GetType))

    End Sub


    'Landschaften in der ersten Dimension bekommen die Bewegungskosten der Landschaft in der 2 Dimension.

    Private Sub dgvChangeStuff_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvChangeStuff.CellEndEdit
        If e.RowIndex >= 0 Then
            Dim S As String = dgvChangeStuff.Rows(e.RowIndex).Cells(dgvColZahl.Index).Value
            If Not IsNumeric(S) Then
                Select Case cbMode.SelectedIndex
                    Case Modes.Weather_Indirect_Range
                        dgvChangeStuff.Rows(e.RowIndex).Cells(dgvColZahl.Index).Value = "0"
                    Case Modes.On_Terrain_Boost
                        dgvChangeStuff.Rows(e.RowIndex).Cells(dgvColZahl.Index).Value = "0"
                    Case Modes.Costs_On_Terrain
                        dgvChangeStuff.Rows(e.RowIndex).Cells(dgvColZahl.Index).Value = "0"
                    Case Modes.Unit_Costs
                        dgvChangeStuff.Rows(e.RowIndex).Cells(dgvColZahl.Index).Value = "0"
                End Select
            End If
        End If

    End Sub

    Private Sub CustomKOSwitchStuffEditor_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Writer.Visible = True
    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
        Me.Close()
    End Sub

    Public Sub Ini(ByVal ScriptWriter As frmScriptWriter)
        ScriptWriter.Visible = False
        Writer = ScriptWriter
        cbMode.SelectedIndex = 0
    End Sub

    Private Sub cbMode_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbMode.SelectedIndexChanged
        dgvChangeStuff.Rows.Clear()
        For Each Col In dgvChangeStuff.Columns
            CType(Col, DataGridViewColumn).Visible = False
        Next
        nudBoost.Visible = False
        Label1.Visible = False

        Dim KOPower As KOCustom.Power = Writer.CustomCOPowers(Writer.cbCustomCOPower.SelectedIndex)
        Select Case cbMode.SelectedIndex
            Case Modes.On_Terrain_Boost
                dgvColText.Visible = True
                dgvColText.HeaderText = "Terrain"
                dgvColWeatherBox.Visible = True
                dgvColWeatherBox.HeaderText = "Apply Boost"
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = (frmScriptWriter.LandschaftUebersetzt(I))
                    If KOPower.AufLandschaftsUntergrund.Contains(frmScriptWriter.LandschaftID(I)) Then
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = False
                    End If
                Next
                nudBoost.Visible = True
                Label1.Visible = True
                nudBoost.Value = KOPower.AufLandschaftsStaerke
            Case Modes.Movememt_Change
                dgvColText.Visible = True
                dgvColText.HeaderText = "Movement"
                dgvColCombo.Visible = True
                dgvColCombo.HeaderText = "New Movement"
                dgvColCombo.Items.Clear()
                dgvColCombo.Items.AddRange(frmScriptWriter.BewegungsartUebersetzt)
                For I = 0 To frmScriptWriter.BewegungsartUebersetzt.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = frmScriptWriter.BewegungsartUebersetzt(I)
                    Dim S As Integer = Array.IndexOf(KOPower.BewegungsartenVertauschungOrg, frmScriptWriter.BewegungsartID(I))
                    If S >= 0 Then
                        dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = frmScriptWriter.getBewegungsString(KOPower.BewegungsartenVertauschungNew(S))
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = frmScriptWriter.BewegungsartUebersetzt(I)
                    End If
                Next
            Case Modes.Costs_On_Terrain
                dgvColText.Visible = True
                dgvColText.HeaderText = "Terrain"
                dgvColZahl.Visible = True
                dgvColZahl.HeaderText = "Movement Boost"
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = frmScriptWriter.LandschaftUebersetzt(I)
                    Dim S As Integer = Array.IndexOf(KOPower.BewegungskostenUntergrund, frmScriptWriter.LandschaftID(I))
                    If S >= 0 Then
                        dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = KOPower.NeueBewegungskosten(S).ToString
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = "0"
                    End If
                Next
            Case Modes.Unit_Costs
                dgvColText.Visible = True
                dgvColText.HeaderText = "Unit"
                dgvColZahl.Visible = True
                dgvColZahl.HeaderText = "Unit Cost Change"
                For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = Sprachconverter.Translate(Objektverwalter.AlleEinheiten(I).Einheit.Einheitenname)
                    dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = "0"
                    For I2 = 0 To KOPower.BonusEinheiten.Length - 1
                        If KOPower.BonusEinheiten(I2).ID = Objektverwalter.AlleEinheiten(I).EinheitenID Then
                            dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = (KOPower.BonusEinheiten(I2).Wert * 100).ToString
                        End If
                    Next
                Next
            Case Modes.Terrain_Change
                dgvColText.Visible = True
                dgvColText.HeaderText = "Terrain"
                dgvColCombo.Visible = True
                dgvColCombo.HeaderText = "New Terrain Costs"
                dgvColCombo.Items.Clear()
                dgvColCombo.Items.AddRange(frmScriptWriter.LandschaftUebersetzt)
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = (frmScriptWriter.LandschaftUebersetzt(I))
                    dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = frmScriptWriter.LandschaftUebersetzt(I)
                    If KOPower.LandschaftsVertauschung.Length > 0 Then
                        For I2 = 0 To KOPower.LandschaftsVertauschung.GetLength(0) - 1
                            If KOPower.LandschaftsVertauschung(I2, 0) = frmScriptWriter.LandschaftID(I) Then
                                dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = frmScriptWriter.getLandschaftString(KOPower.LandschaftsVertauschung(I2, 1))
                            End If
                        Next
                    End If
                Next
            Case Modes.Terrain_Boost
                dgvColText.Visible = True
                dgvColText.HeaderText = "Terrain"
                dgvColWeatherBox.Visible = True
                dgvColWeatherBox.HeaderText = "Apply Terrain as Boost"

                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = (frmScriptWriter.LandschaftUebersetzt(I))
                    If KOPower.LandschaftsUntergrund.Contains(frmScriptWriter.LandschaftID(I)) Then
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = False
                    End If
                Next
                dgvChangeStuff.Rows.Add()
                dgvChangeStuff.Rows(dgvChangeStuff.Rows.Count - 1).Cells(dgvColText.Index).Value = Sprachconverter.Translate("Deckung")
                If KOPower.LandschaftsUntergrund.Contains("Deckung") Then
                    dgvChangeStuff.Rows(dgvChangeStuff.Rows.Count - 1).Cells(dgvColWeatherBox.Index).Value = True
                Else
                    dgvChangeStuff.Rows(dgvChangeStuff.Rows.Count - 1).Cells(dgvColWeatherBox.Index).Value = False
                End If
                nudBoost.Visible = True
                Label1.Visible = True
                nudBoost.Value = KOPower.LandschaftsStaerke
            Case Modes.Weather_Indirect_Range
                dgvColText.Visible = True
                dgvColText.HeaderText = "Weather"
                dgvColZahl.Visible = True
                dgvColZahl.HeaderText = "Changed Firerange"
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)
                For I = 0 To Wetter.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = Sprachconverter.Translate(Wetter(I))
                    Dim MomWetter As ObjektSpielfeld.Wetterarten = I
                    Dim Stelle As Integer = Array.IndexOf(KOPower.WetterartfuerSenker, MomWetter)
                    If Stelle >= 0 Then
                        dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = KOPower.WetterReichweitenbonus(Stelle).ToString
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value = "0"
                    End If
                Next
            Case Modes.Weather_Movement
                dgvColText.Visible = True
                dgvColText.HeaderText = "Weather"
                dgvColCombo.Visible = True
                dgvColCombo.HeaderText = "New Movement Table"
                dgvColCombo.Items.Clear()
                Dim Names As String() = [Enum].GetNames(ObjektKO.Bewegungsarten.Eins.GetType)
                For I = 0 To Names.Length - 1
                    dgvColCombo.Items.Add(Sprachconverter.Translate(Names(I)))
                Next
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)

                For I = 0 To Wetter.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = Sprachconverter.Translate(Wetter(I))
                    Dim MomWetter As ObjektSpielfeld.Wetterarten = I
                    Dim Stelle As Integer = Array.IndexOf(KOPower.Bewegunssenker, MomWetter)
                    If Stelle >= 0 Then
                        dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = Sprachconverter.Translate(KOPower.Bewegungswetter(Stelle).ToString)
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value = Sprachconverter.Translate(Wetter(I).ToString)
                    End If
                Next
            Case Modes.Weather_Ignoring
                dgvColText.Visible = True
                dgvColText.HeaderText = "Weather"
                dgvColWeatherBox.Visible = True
                dgvColWeatherBox.HeaderText = "Apply Immunity"
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)
                For I = 0 To Wetter.Length - 1
                    dgvChangeStuff.Rows.Add()
                    dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value = Sprachconverter.Translate(Wetter(I))
                    Dim MomWetter As ObjektSpielfeld.Wetterarten = I
                    If KOPower.Wetterimmunitaet.Contains(MomWetter) Then
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True
                    Else
                        dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = False
                    End If
                Next

        End Select
    End Sub

    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        Dim KOPower As KOCustom.Power = Writer.CustomCOPowers(Writer.cbCustomCOPower.SelectedIndex)
        Select Case cbMode.SelectedIndex
            Case Modes.On_Terrain_Boost
                ReDim KOPower.AufLandschaftsUntergrund(-1)
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True Then
                        Array.Resize(KOPower.AufLandschaftsUntergrund, KOPower.AufLandschaftsUntergrund.Length + 1)
                        KOPower.AufLandschaftsUntergrund(KOPower.AufLandschaftsUntergrund.Length - 1) = frmScriptWriter.LandschaftID(I)
                    End If
                Next
                KOPower.AufLandschaftsStaerke = nudBoost.Value
            Case Modes.Movememt_Change
                ReDim KOPower.BewegungsartenVertauschungNew(-1)
                ReDim KOPower.BewegungsartenVertauschungOrg(-1)
                For I = 0 To frmScriptWriter.BewegungsartID.Length - 1
                    Dim NewMove As String = frmScriptWriter.getBewegungskID(dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value)
                    If frmScriptWriter.BewegungsartID(I) <> NewMove Then
                        Array.Resize(KOPower.BewegungsartenVertauschungNew, KOPower.BewegungsartenVertauschungNew.Length + 1)
                        Array.Resize(KOPower.BewegungsartenVertauschungOrg, KOPower.BewegungsartenVertauschungOrg.Length + 1)
                        KOPower.BewegungsartenVertauschungOrg(KOPower.BewegungsartenVertauschungOrg.Length - 1) = frmScriptWriter.BewegungsartID(I)
                        KOPower.BewegungsartenVertauschungNew(KOPower.BewegungsartenVertauschungNew.Length - 1) = NewMove
                    End If
                Next
            Case Modes.Costs_On_Terrain
                ReDim KOPower.BewegungskostenUntergrund(-1)
                ReDim KOPower.NeueBewegungskosten(-1)
                For I = 0 To frmScriptWriter.BewegungsartUebersetzt.Length - 1
                    If CInt(dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value) <> 0 Then
                        Array.Resize(KOPower.BewegungskostenUntergrund, KOPower.BewegungskostenUntergrund.Length + 1)
                        Array.Resize(KOPower.NeueBewegungskosten, KOPower.NeueBewegungskosten.Length + 1)
                        KOPower.BewegungskostenUntergrund(KOPower.BewegungskostenUntergrund.Length - 1) = frmScriptWriter.LandschaftID(I)
                        KOPower.NeueBewegungskosten(KOPower.NeueBewegungskosten.Length - 1) = CInt(dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value)
                    End If
                Next
            Case Modes.Unit_Costs
                ReDim KOPower.BonusEinheiten(-1)
                For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value <> "0" Then
                        Array.Resize(KOPower.BonusEinheiten, KOPower.BonusEinheiten.Length + 1)
                        KOPower.BonusEinheiten(KOPower.BonusEinheiten.Length - 1) = New ObjektKO.StringUndZahl(Objektverwalter.AlleEinheiten(I).EinheitenID, CSng(dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value) / 100)
                    End If
                Next
            Case Modes.Terrain_Change

                Dim L1 As String() = {}
                Dim L2 As String() = {}
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value <> frmScriptWriter.LandschaftUebersetzt(I) Then
                        Array.Resize(L1, L1.Length + 1)
                        Array.Resize(L2, L2.Length + 1)
                        L1(L1.Length - 1) = frmScriptWriter.LandschaftID(I)
                        L2(L2.Length - 1) = frmScriptWriter.getLandschaftID(dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value)
                    End If
                Next
                ReDim KOPower.LandschaftsVertauschung(L1.Length - 1, 1)
                For I = 0 To L1.Length - 1
                    KOPower.LandschaftsVertauschung(I, 0) = L1(I)
                    KOPower.LandschaftsVertauschung(I, 1) = L2(I)
                Next
            Case Modes.Terrain_Boost
                ReDim KOPower.LandschaftsUntergrund(-1)
                For I = 0 To frmScriptWriter.LandschaftUebersetzt.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True Then
                        Array.Resize(KOPower.LandschaftsUntergrund, KOPower.LandschaftsUntergrund.Length + 1)
                        KOPower.LandschaftsUntergrund(KOPower.LandschaftsUntergrund.Length - 1) = frmScriptWriter.LandschaftID(I)
                    End If
                Next
                If dgvChangeStuff.Rows(dgvChangeStuff.Rows.Count - 1).Cells(dgvColWeatherBox.Index).Value = True Then
                    Array.Resize(KOPower.LandschaftsUntergrund, KOPower.LandschaftsUntergrund.Length + 1)
                    KOPower.LandschaftsUntergrund(KOPower.LandschaftsUntergrund.Length - 1) = "Deckung"
                End If
                KOPower.LandschaftsStaerke = nudBoost.Value
            Case Modes.Weather_Indirect_Range
                ReDim KOPower.WetterReichweitenbonus(-1)
                ReDim KOPower.WetterartfuerSenker(-1)
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)
                For I = 0 To Wetter.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value <> "0" Then
                        Array.Resize(KOPower.WetterReichweitenbonus, KOPower.WetterReichweitenbonus.Length + 1)
                        Array.Resize(KOPower.WetterartfuerSenker, KOPower.WetterartfuerSenker.Length + 1)
                        KOPower.WetterReichweitenbonus(KOPower.WetterReichweitenbonus.Length - 1) = CInt(dgvChangeStuff.Rows(I).Cells(dgvColZahl.Index).Value)
                        KOPower.WetterartfuerSenker(KOPower.WetterartfuerSenker.Length - 1) = I
                    End If
                Next
            Case Modes.Weather_Movement
                ReDim KOPower.Bewegungswetter(-1)
                ReDim KOPower.Bewegunssenker(-1)
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)
                For I = 0 To Wetter.Length - 1
                    If dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value <> dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value Then
                        Array.Resize(KOPower.Bewegungswetter, KOPower.Bewegungswetter.Length + 1)
                        Array.Resize(KOPower.Bewegunssenker, KOPower.Bewegunssenker.Length + 1)
                        KOPower.Bewegunssenker(KOPower.Bewegunssenker.Length - 1) = [Enum].Parse(ObjektSpielfeld.Wetterarten.Regen.GetType, Sprachconverter.TranslateIntoGerman(dgvChangeStuff.Rows(I).Cells(dgvColText.Index).Value))
                        KOPower.Bewegungswetter(KOPower.Bewegungswetter.Length - 1) = [Enum].Parse(ObjektKO.Bewegungsarten.Eins.GetType, Sprachconverter.TranslateIntoGerman(dgvChangeStuff.Rows(I).Cells(dgvColCombo.Index).Value))
                    End If
                Next
            Case Modes.Weather_Ignoring
                ReDim KOPower.Wetterimmunitaet(-1)
                Dim Wetter As String() = [Enum].GetNames(ObjektSpielfeld.Wetterarten.Regen.GetType)
                For I = 0 To Wetter.Length - 1
                    Dim MomWetter As ObjektSpielfeld.Wetterarten = I
                    If dgvChangeStuff.Rows(I).Cells(dgvColWeatherBox.Index).Value = True Then
                        Array.Resize(KOPower.Wetterimmunitaet, KOPower.Wetterimmunitaet.Length + 1)
                        KOPower.Wetterimmunitaet(KOPower.Wetterimmunitaet.Length - 1) = MomWetter
                    End If
                Next
        End Select
        Writer.CustomCOPowers(Writer.cbCustomCOPower.SelectedIndex) = KOPower
    End Sub
End Class